# Do not run data set on git/github until privacy has been cleared
################
##### Data  
################
################
##### Research
################
################
##### Guess work   
################
################
#####  Notes:
################
### Source ---->  Input ----> Model ----> Policy Estimates (output)
###  (_so)        (_in)       (_mo)        (_pe)
### values      functions   functions      values
###             & values    & values
### arguments in functions should used "_var" and functions should "_f"
#invisible( list2env(call_params_f(),.GlobalEnv) )


# Each analytic code chunk will begin by listing all the inputs it needs, and
# the outputs it produces.
# - inputs: list
# - outputs: list
#### The key essential analytic steps are wrapted in a function   
#chunk_name_of_chunk <- function(){
##########################################
##########################################  
#
# here goes the essential analytic content
#
##########################################
##########################################  
#    return( )                         # A list with all the objects
#}                                     # generated inside the function
# The following line executes the code chunk and deposits its results
# into the current R enviornment:
#invisible( list2env(chunk_name_of_chunk(),.GlobalEnv) )
#
##### Execute values of the functions above when needed for the text:
# Anything under this comment is to create objects that are used in the body of
# text. Not to be used in the final results (could be deleted). Each of these
# object should end with the suffix _temp

1 Introduction

Summary of the issue and introduction to the policy analysis is conducted.

The goal of this analysis is to provide the best empirical information for policy makers debating the implemention of “x” policy. This document describes all the analytical steps required to reproduce the analysis, and displaying the actual computer code use in each step. In addition to this report, the reader can find all the materials to reproduce the findings presented here in GitHub. The main output, presented in the results section of this report, can also be explored interactively for different assumptions on the corresponding shiny app.

1.1 Source Information for data + analytical methods

For this dynamic document, we are conducting this specific analysis, and it is computed using three different approaches:

  1. Approach 1 (source link)
  2. Approach 2 (source link)
  3. Approach 3 (source link)

???

2 Methodology

Explain what the final estimate indicator is, how the analysis is to be performed, what factors are looked at, etc.

2.1 Common Structure

Introduce the starting point and the final policy estimate. Include alternative indicators of our final policy estimates as well.

2.1.1 Main Equation (the model)

Explanation for the main equation

Show all the details \[\begin{equation} y = r + q - k \label{eq:1} \tag{1} \end{equation}\]

Where:

  • \(y\): one-liner to define y
  • \(r\): one-liner to define r
  • \(k\): one-liner to define k

2.5 Summary of All Approaches

Approach Part 1 Part 2
1.1 Specification of Approach 1 with Part 1 Assumption 1 Specification of Approach 1 with Part 2 Assumption 1
1.2 Specification of Approach 1 with Part 1 Assumption 2 Specification of Aprroach 1 with Part 2 Assumption 2
2.1 Specification of Approach 2 with Part 1 Assumption 1 Specification of Approach 2 with Part 2 Assumption 1
2.2 Specification of Approach 2 with Part 1 Assumption 2 Specification of Approach 2 with Part 2 Assumption 2

Bolded row is the assumptions and the approach we use to generate the main policy estimate plot.

3 Main results

Show all the details

Table 3.1: Table Caption
results1 results2 results3
situation1 results NA results
situation2 NA results NA
situation3 NA NA results

4 Monte Carlo Simulations

sim_data1_f <- function(nsims = 1e2,
                      r_input1_var2,
                      r_input1_var2_sd,
                      r_input2_var2,
                      r_input2_var2_sd,
                      q_input1_var2,
                      q_input1_var2_sd,
                      q_input2_var2,
                      q_input2_var2_sd,
                      k_input1_var2,
                      k_input1_var2_sd,
                      k_input2_var2,
                      k_input2_var2_sd){
    ################
    ###### Draws   
    ################  
  start_time <- Sys.time()
  set.seed(142857)
  r1_sim <- rnorm(n = nsims, mean = r_input1_var2, sd= r_input1_var2_sd)
  r2_sim <- rnorm(n = nsims, mean = r_input2_var2, sd= r_input2_var2_sd)
  q1_sim <- rnorm(n = nsims, mean = q_input1_var2, sd= q_input1_var2_sd)
  q2_sim <- rnorm(n = nsims, mean = q_input2_var2, sd= q_input2_var2_sd)
  k1_sim <- rnorm(n = nsims, mean = k_input1_var2, sd= k_input1_var2_sd)
  k2_sim <- rnorm(n = nsims, mean = k_input2_var2, sd= k_input2_var2_sd)
  
  
  
                      

    ################
    ###### Runs    
    ################

  result1_sim <- rep(NA, nsims) #result1
  result2_sim <- rep(NA, nsims) #result2
  
  for (i in 1:nsims){
    invisible(list2env(
      one_run(r_input1_var1 = r1_sim[i],
              r_input2_var1 = r2_sim[i],
              q_input1_var1 = q1_sim[i],
              q_input2_var1 = q2_sim[i],
              k_input1_var1 = k1_sim[i],
              k_input2_var1 = k2_sim[i]
              ), .GlobalEnv))
    
    result1_sim[i] <- mainequation_f(r_final_var = r_in,
                          q_final_var = q_in,
                          k_final_var = k_in)
    result2_sim[i] <- alternative_f(r_final_var = r_in,
                          q_final_var = q_in,
                          k_final_var = k_in)
  }
    total_time <- Sys.time() - start_time
    return(list("result1_sim" = result1_sim,
                "result2_sim" = result2_sim))
  
  
}

policy_estimates_varnames <- c(
  "result1_sim",
  "result2_sim"
)

policy_estimates_text <- c(
  "Main Equation",
  "Alternative Equation"
)

5 References


  1. Notes of referenced section

  2. Notes on referenced section

  3. Notes on referenced section

LS0tDQp0aXRsZTogIjxjZW50ZXI+PGRpdiBjbGFzcz0gJ215dGl0bGUnPlRlbXBsYXRlPC9kaXY+PC9jZW50ZXI+Ig0KZGF0ZTogIjxjZW50ZXI+PGRpdiBjbGFzcz0nbXlzdWJ0aXRsZSc+YHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWA8L2Rpdj48L2NlbnRlcj4iDQphdXRob3I6ICI8Y2VudGVyPjxkaXYgY2xhc3MgPSAnY29udHJpYnV0b3JzJz5Db250cmlidXRvcnM8L2Rpdj48L2NlbnRlcj4iDQpvdXRwdXQ6DQogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjc3M6IHN0eWxlLmNzcw0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICBpbmNsdWRlczoNCiAgICAgIGFmdGVyX2JvZHk6IGZvb3Rlci5odG1sDQogICAga2VlcF9tZDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiBubw0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIHRvYzogeWVzDQogICAgdG9jX2NvbGxhcHNlZDogbm8NCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiAnMycNCiAgd29yZF9kb2N1bWVudDogbnVsbA0KbGluay1jaXRhdGlvbnM6IHllcw0KcGRmX2RvY3VtZW50Og0KICBleHRyYV9kZXBlbmRlbmNpZXM6IHhjb2xvcg0KICBmaWdfY2FwdGlvbjogbm8NCmJpYmxpb2dyYXBoeTogYmlibGlvZ3JhcGh5LmJpYg0KDQprbml0OiANCiAgIyByZW5kZXIgdG8gaW5kZXguaHRtbCBmb3IgR2l0SHViIHBhZ2VzDQogICMgcmVuZGVyIHRvIDA1X2ZpbmFsX29wYS5odG1sIHRvIGtuaXQgbG9jYWxseQ0KICAjIFlBTUwgZG9lcyBub3Qgc3VwcG9ydCBjb21tZW50aW5nIGluc2lkZSB0aGUgZnVuY3Rpb24NCiAgKGZ1bmN0aW9uKGlucHV0X2ZpbGUsIGVuY29kaW5nKSB7DQogIHJtYXJrZG93bjo6cmVuZGVyKGlucHV0X2ZpbGUsIGVuY29kaW5nPWVuY29kaW5nLCBvdXRwdXRfZmlsZT1maWxlLnBhdGgoIi4uIiwgJ2luZGV4Lmh0bWwnKSk7IA0KICBybWFya2Rvd246OnJlbmRlcihpbnB1dF9maWxlLCBlbmNvZGluZz1lbmNvZGluZywgb3V0cHV0X2ZpbGU9JzAwX3RlbXBsYXRlLmh0bWwnKTsgDQogIH0pDQotLS0NClxkZWZcYmx1ZXtcY29sb3J7Ymx1ZX19DQpcZGVmXHJlZHtcY29sb3J7cmVkfX0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgcHVybCA9IEZBTFNFfSANCiMgTG9hZGluZyByZXF1aXJlZCBsaWJyYXJpZXMNCmxpc3Qub2YucGFja2FnZXMgPC0gYygidGlkeXZlcnNlIiwgImhlcmUiLCAia2FibGVFeHRyYSIsICJyZWFkeGwiLCJwbG90bHkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgImJvb2tkb3duIiwgInJvb3RTb2x2ZSIsInNoaW55QlMiLCAic2hpbnl0aGVtZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgImdncGxvdDIiKQ0KDQpuZXcucGFja2FnZXMgPC0gbGlzdC5vZi5wYWNrYWdlc1shKGxpc3Qub2YucGFja2FnZXMgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoKVssIlBhY2thZ2UiXSldDQppZihsZW5ndGgobmV3LnBhY2thZ2VzKSkgaW5zdGFsbC5wYWNrYWdlcyhuZXcucGFja2FnZXMsIHJlcG9zPSAiaHR0cDovL2NyYW4uY25yLmJlcmtlbGV5LmVkdS8iKQ0KDQpsYXBwbHkobGlzdC5vZi5wYWNrYWdlcywgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQ0KDQprbml0cjo6b3B0c19rbml0JHNldChyb290LmRpciA9IGhlcmUoKSkNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCg0Kc2V0d2QoaGVyZSgpKQ0KDQojIFB1cmwgdG8gYWxsX2FuYWx5c2lzLlINCm9wdGlvbnMoa25pdHIuZHVwbGljYXRlLmxhYmVsID0gImFsbG93IikgIyB3b3JrYXJvdW5kIGZvciBwdXJsIGVycm9yDQprbml0cjo6cHVybCgiY29kZS8wMF90ZW1wbGF0ZS5SbWQiLCAiY29kZS9zaGlueV9hcHAvYWxsX2FuYWx5c2lzLlIiKQ0KDQpwcmludF9jb2RlIDwtIFRSVUUNCmBgYCANCg0KDQpgYGB7ciBwYXJhbWV0ZXJzLCBlY2hvPXByaW50X2NvZGV9DQojIERvIG5vdCBydW4gZGF0YSBzZXQgb24gZ2l0L2dpdGh1YiB1bnRpbCBwcml2YWN5IGhhcyBiZWVuIGNsZWFyZWQNCiMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIERhdGEgIA0KIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMgUmVzZWFyY2gNCiMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIEd1ZXNzIHdvcmsgICANCiMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjICBOb3RlczoNCiMjIyMjIyMjIyMjIyMjIyMNCiMjIyBTb3VyY2UgLS0tLT4gIElucHV0IC0tLS0+IE1vZGVsIC0tLS0+IFBvbGljeSBFc3RpbWF0ZXMgKG91dHB1dCkNCiMjIyAgKF9zbykgICAgICAgIChfaW4pICAgICAgIChfbW8pICAgICAgICAoX3BlKQ0KIyMjIHZhbHVlcyAgICAgIGZ1bmN0aW9ucyAgIGZ1bmN0aW9ucyAgICAgIHZhbHVlcw0KIyMjICAgICAgICAgICAgICYgdmFsdWVzICAgICYgdmFsdWVzDQojIyMgYXJndW1lbnRzIGluIGZ1bmN0aW9ucyBzaG91bGQgdXNlZCAiX3ZhciIgYW5kIGZ1bmN0aW9ucyBzaG91bGQgIl9mIg0KI2ludmlzaWJsZSggbGlzdDJlbnYoY2FsbF9wYXJhbXNfZigpLC5HbG9iYWxFbnYpICkNCg0KDQojIEVhY2ggYW5hbHl0aWMgY29kZSBjaHVuayB3aWxsIGJlZ2luIGJ5IGxpc3RpbmcgYWxsIHRoZSBpbnB1dHMgaXQgbmVlZHMsIGFuZA0KIyB0aGUgb3V0cHV0cyBpdCBwcm9kdWNlcy4NCiMgLSBpbnB1dHM6IGxpc3QNCiMgLSBvdXRwdXRzOiBsaXN0DQojIyMjIFRoZSBrZXkgZXNzZW50aWFsIGFuYWx5dGljIHN0ZXBzIGFyZSB3cmFwdGVkIGluIGEgZnVuY3Rpb24gICANCiNjaHVua19uYW1lX29mX2NodW5rIDwtIGZ1bmN0aW9uKCl7DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgDQojDQojIGhlcmUgZ29lcyB0aGUgZXNzZW50aWFsIGFuYWx5dGljIGNvbnRlbnQNCiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICANCiMgICAgcmV0dXJuKCApICAgICAgICAgICAgICAgICAgICAgICAgICMgQSBsaXN0IHdpdGggYWxsIHRoZSBvYmplY3RzDQojfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdlbmVyYXRlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uDQojIFRoZSBmb2xsb3dpbmcgbGluZSBleGVjdXRlcyB0aGUgY29kZSBjaHVuayBhbmQgZGVwb3NpdHMgaXRzIHJlc3VsdHMNCiMgaW50byB0aGUgY3VycmVudCBSIGVudmlvcm5tZW50Og0KI2ludmlzaWJsZSggbGlzdDJlbnYoY2h1bmtfbmFtZV9vZl9jaHVuaygpLC5HbG9iYWxFbnYpICkNCiMNCiMjIyMjIEV4ZWN1dGUgdmFsdWVzIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUgd2hlbiBuZWVkZWQgZm9yIHRoZSB0ZXh0Og0KIyBBbnl0aGluZyB1bmRlciB0aGlzIGNvbW1lbnQgaXMgdG8gY3JlYXRlIG9iamVjdHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgYm9keSBvZg0KIyB0ZXh0LiBOb3QgdG8gYmUgdXNlZCBpbiB0aGUgZmluYWwgcmVzdWx0cyAoY291bGQgYmUgZGVsZXRlZCkuIEVhY2ggb2YgdGhlc2UNCiMgb2JqZWN0IHNob3VsZCBlbmQgd2l0aCB0aGUgc3VmZml4IF90ZW1wDQoNCmBgYA0KDQoNCmBgYHtyIHNvdXJjZXMsIGV2YWwgPSBUUlVFLCBlY2hvPXByaW50X2NvZGUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIC0gaW5wdXRzOiBub25lDQojIC0gb3V0cHV0czogYWxsIHNvdXJjZXMgY29taW5nIGZyb20gZGF0YSwgcmVzZWFyY2ggYW5kIGd1ZXNzd29yaw0KY2h1bmtfc291cmNlcyA8LSBmdW5jdGlvbigpew0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICANCiAgICAjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMgU2V0dXANCiAgICAjIyMjIyMjIyMjIyMjICANCiAgICBuc2ltc19zbyA8LSAxZTQNCiAgICBwb2xpY3lfZXN0aW1hdGVfc28gPC0gIk1haW4gRXF1YXRpb24iDQogICAgcmVzY2FsZV9zbyA8LSBUUlVFDQogICAgIyMjIyMjIyMjIyMjIw0KICAgICMjIyMjIERhdGEgIA0KICAgICMjIyMjIyMjIyMjIyMNCiAgICANCiAgIyBDcmVhdGUgb2JqZWN0cyBmb3IgZGF0YSBleHRyYWN0ZWQgZnJvbSB2YXJpb3VzIHNvdXJjZXMNCiAgICANCiAgICByX2lucHV0MV9zbyA8LSAwLjENCiAgICByX2lucHV0Ml9zbyA8LSAwLjINCiAgICAjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMgUmVzZWFyY2gNCiAgICAjIyMjIyMjIyMjIyMjDQogIA0KICAjIENyZWF0ZSBvYmplY3RzIGZvciBwYXJhbWV0ZXJzIGV4dHJhY3RlZCBmcm9tIHJlc2VhcmNoIHBhcGVycyANCiAgICBxX2lucHV0MV9zbyA8LSAwLjUNCiAgICBxX2lucHV0Ml9zbyA8LSAwLjgNCiAgICAjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMgR3Vlc3Mgd29yayAgIA0KICAgICMjIyMjIyMjIyMjIyMNCiAgDQogICMgQ3JlYXRlIG9iamVjdHMgZm9yIHZhcmlhYmxlcyBmcm9tIGVkdWNhdGVkIGd1ZXNzZXMgb3IgZXN0aW1hdGVzICANCiAgDQoNCiAgICAjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMgTm90ZXM6IA0KICAgICMjIyMjIyMjIyMjIyMNCiAgDQogICMgTm90ZXMgZm9yIHRoZSBvYmplY3RzIGRlZmluZWQgYWJvdmUsIGluY2x1ZGluZyBzb3VyY2VzLCBleHBsYW5hdGlvbnMsIGV0Yy4gDQogICAga19pbnB1dDFfc28gPC0gMw0KICAgIGtfaW5wdXQyX3NvIDwtIDQNCiAgICANCiAgICAjcmV0dXJuKCBzYXBwbHkoIGxzKHBhdHRlcm49ICJfc29cXGIiKSwgZnVuY3Rpb24oeCkgZ2V0KHgpKSApDQogICAgcmV0dXJuICgNCiAgICAgIGxpc3QoIm5zaW1zX3NvIiA9IG5zaW1zX3NvLA0KICAgICAgICAgICAicG9saWN5X2VzdGltYXRlX3NvIiA9IHBvbGljeV9lc3RpbWF0ZV9zbywNCiAgICAgICAgICAgInJlc2NhbGVfc28iID0gcmVzY2FsZV9zbywNCiAgICAgICAgICAgInJfaW5wdXQxX3NvIiA9IHJfaW5wdXQxX3NvLA0KICAgICAgICAgICAicl9pbnB1dDJfc28iID0gcl9pbnB1dDJfc28sDQogICAgICAgICAgICJxX2lucHV0MV9zbyIgPSBxX2lucHV0MV9zbywNCiAgICAgICAgICAgInFfaW5wdXQyX3NvIiA9IHFfaW5wdXQyX3NvLA0KICAgICAgICAgICAia19pbnB1dDFfc28iID0ga19pbnB1dDFfc28sDQogICAgICAgICAgICJrX2lucHV0Ml9zbyIgPSBrX2lucHV0Ml9zbw0KICAgICAgICAgICApDQogICAgKQ0KfQ0KaW52aXNpYmxlKGxpc3QyZW52KGNodW5rX3NvdXJjZXMoKSwuR2xvYmFsRW52KSApDQpgYGANCg0KIyBJbnRyb2R1Y3Rpb24NClN1bW1hcnkgb2YgdGhlIGlzc3VlIGFuZCBpbnRyb2R1Y3Rpb24gdG8gdGhlIHBvbGljeSBhbmFseXNpcyBpcyBjb25kdWN0ZWQuIA0KDQpUaGUgZ29hbCBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIHByb3ZpZGUgdGhlIGJlc3QgZW1waXJpY2FsIGluZm9ybWF0aW9uIGZvciBwb2xpY3kgbWFrZXJzIGRlYmF0aW5nIHRoZSBpbXBsZW1lbnRpb24gb2YgIngiIHBvbGljeS4gVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYWxsIHRoZSBhbmFseXRpY2FsIHN0ZXBzIHJlcXVpcmVkIHRvIHJlcHJvZHVjZSB0aGUgYW5hbHlzaXMsIGFuZCBkaXNwbGF5aW5nIHRoZSBhY3R1YWwgY29tcHV0ZXIgY29kZSB1c2UgaW4gZWFjaCBzdGVwLiBJbiBhZGRpdGlvbiB0byB0aGlzIHJlcG9ydCwgdGhlIHJlYWRlciBjYW4gZmluZCBhbGwgdGhlIG1hdGVyaWFscyB0byByZXByb2R1Y2UgdGhlIGZpbmRpbmdzIHByZXNlbnRlZCBoZXJlIGluIEdpdEh1Yi4gVGhlIG1haW4gb3V0cHV0LCBwcmVzZW50ZWQgaW4gdGhlIHJlc3VsdHMgc2VjdGlvbiBvZiB0aGlzIHJlcG9ydCwgY2FuIGFsc28gYmUgZXhwbG9yZWQgaW50ZXJhY3RpdmVseSBmb3IgZGlmZmVyZW50IGFzc3VtcHRpb25zIG9uIHRoZSBjb3JyZXNwb25kaW5nIHNoaW55IGFwcC4gDQoNCiMjIFNvdXJjZSBJbmZvcm1hdGlvbiBmb3IgZGF0YSArIGFuYWx5dGljYWwgbWV0aG9kcw0KDQpGb3IgdGhpcyBkeW5hbWljIGRvY3VtZW50LCB3ZSBhcmUgY29uZHVjdGluZyB0aGlzIHNwZWNpZmljIGFuYWx5c2lzLCBhbmQgaXQgaXMgY29tcHV0ZWQgdXNpbmcgdGhyZWUgZGlmZmVyZW50IGFwcHJvYWNoZXM6DQoNCjEuIEFwcHJvYWNoIDEgKHNvdXJjZSBsaW5rKQ0KMi4gQXBwcm9hY2ggMiAoc291cmNlIGxpbmspDQozLiBBcHByb2FjaCAzIChzb3VyY2UgbGluaykNCg0KDQoNCj8/PyAgDQoNCiMjIEtleSBwb2xpY3kgZXN0aW1hdGVzIGZvciBwb2xpY3kgbWFrZXJzICANCmBgYHtyfQ0KI215IHRob3VnaHRzOiBzaG91bGQgd2UgZm9yZWZyb250IHRoZSBjb25jbHVzaW9ucyBiZWZvcmUgdGhlIG1ldGhvZG9sb2d5PyANCg0KI1NhbmRyYTogSSB0aGluayB3ZSBzaG91bGQgc3BlY2lmeSB3aGljaCBhcHByb2FjaCB3ZSB1c2UgdG8gZ2VuZXJhdGUgdGhlIGdyYXBoLCBidXQga2VlcCB0aGUgbWV0aG9kb2xvZ3kgYmVmb3JlIHRoZSBjb25jbHVzaW9ucy4gDQpgYGANCg0KYGBge3IgZmluYWwtb3V0cHV0fQ0KYGBgDQo/Pz8NCg0KIyBNZXRob2RvbG9neQ0KDQpFeHBsYWluIHdoYXQgdGhlIGZpbmFsIGVzdGltYXRlIGluZGljYXRvciBpcywgaG93IHRoZSBhbmFseXNpcyBpcyB0byBiZSBwZXJmb3JtZWQsIHdoYXQgZmFjdG9ycyBhcmUgbG9va2VkIGF0LCBldGMuDQoNCiMjIENvbW1vbiBTdHJ1Y3R1cmUNCg0KSW50cm9kdWNlIHRoZSBzdGFydGluZyBwb2ludCBhbmQgdGhlIGZpbmFsIHBvbGljeSBlc3RpbWF0ZS4gSW5jbHVkZSBhbHRlcm5hdGl2ZSBpbmRpY2F0b3JzIG9mIG91ciBmaW5hbCBwb2xpY3kgZXN0aW1hdGVzIGFzIHdlbGwuICANCg0KIyMjIE1haW4gRXF1YXRpb24gKHRoZSBtb2RlbCkNCg0KRXhwbGFuYXRpb24gZm9yIHRoZSBtYWluIGVxdWF0aW9uIA0KDQo8ZGV0YWlscz48c3VtbWFyeT5TaG93IGFsbCB0aGUgZGV0YWlsczwvc3VtbWFyeT4NClxiZWdpbntlcXVhdGlvbn0NCnkgPSByICsgcSAtIGsNClxsYWJlbHtlcToxfQ0KXHRhZ3sxfQ0KXGVuZHtlcXVhdGlvbn0NCg0KV2hlcmU6IA0KDQotICR5JDogb25lLWxpbmVyIHRvIGRlZmluZSB5DQotICRyJDogb25lLWxpbmVyIHRvIGRlZmluZSByDQotICRrJDogb25lLWxpbmVyIHRvIGRlZmluZSBrDQoNCjwvZGV0YWlscz4NCg0KDQoNCiMjIyBBbHRlcm5hdGl2ZSBFcXVhdGlvbg0KDQpFeHBsYW5hdGlvbiBmb3IgdGhlIGFsdGVybmF0aXZlIGVxdWF0aW9uIA0KDQo8ZGV0YWlscz48c3VtbWFyeT5TaG93IGFsbCB0aGUgZGV0YWlsczwvc3VtbWFyeT4NClxiZWdpbntlcXVhdGlvbn0NCnkgPSByICsgcSArIGsNClxsYWJlbHtlcToyfQ0KXHRhZ3syfQ0KXGVuZHtlcXVhdGlvbn0NCg0KV2hlcmU6DQoNCi0gJHkkOiBvbmUtbGluZXIgdG8gZGVmaW5lIHkNCi0gJHIkOiBvbmUtbGluZXIgdG8gZGVmaW5lIHINCi0gJGskOiBvbmUtbGluZXIgdG8gZGVmaW5lIGsNCg0KYGBge3IgdGVzdCwgZXZhbD1UUlVFfQ0KIyAtIGlucHV0czogDQojIC0gb3V0cHV0czogDQpjaHVua190ZXN0IDwtIGZ1bmN0aW9uKCl7DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgDQogIA0KICAgICMgcmFuZG9tIGVxdWF0aW9uIHRvIHVzZSBhcyBvdXIgbWFpbiBlcXVhdGlvbiB0byBnZXQgdGhlIGZpbmFsIHJlc3VsdA0KICAgIG1haW5lcXVhdGlvbl9mIDwtIGZ1bmN0aW9uKHJfZmluYWxfdmFyID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2ZpbmFsX3ZhciA9IDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga19maW5hbF92YXIgPSAxKSB7DQogICAgICAgIHJldHVybiAocl9maW5hbF92YXIgKyBxX2ZpbmFsX3ZhciAtIGtfZmluYWxfdmFyKQ0KICAgIH0NCiAgICANCiAgICAjIHJhbmRvbSBlcXVhdGlvbiB0byB1c2UgYXMgb3VyIGFsdGVybmF0aXZlIGVxdWF0aW9uIHRvIGdldCB0aGUgZmluYWwgcmVzdWx0DQogICAgYWx0ZXJuYXRpdmVfZiA8LSBmdW5jdGlvbiggcl9maW5hbF92YXIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZmluYWxfdmFyID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrX2ZpbmFsX3ZhciA9IDEpew0KICAgICAgcmV0dXJuIChyX2ZpbmFsX3ZhciArIHFfZmluYWxfdmFyICsga19maW5hbF92YXIpDQogICAgICANCiAgICB9DQogICAgDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgDQogICAgcmV0dXJuKGxpc3QoIm1haW5lcXVhdGlvbl9mIiA9IG1haW5lcXVhdGlvbl9mLCAiYWx0ZXJuYXRpdmVfZiIgPSBhbHRlcm5hdGl2ZV9mKSkgICAgIyBUcnkgdG8gcmV0dXJuIG9ubHkgZnVuY3Rpb25zDQp9DQppbnZpc2libGUoIGxpc3QyZW52KGNodW5rX3Rlc3QoKSwuR2xvYmFsRW52KSApDQoNCiMjIyMjIEV4ZWN1dGUgdmFsdWVzIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUgd2hlbiBuZWVkZWQgZm9yIHRoZSB0ZXh0Og0KbWFpbmVxdWF0aW9uX2luIDwtIG1haW5lcXVhdGlvbl9mKCkNCmFsdGVybmF0aXZlX2luIDwtIGFsdGVybmF0aXZlX2YoKQ0KYGBgDQoNCg0KPC9kZXRhaWxzPg0KDQojIyBTdWIgQ29tbW9uIENvbXBvbmVudHM6DQoNCiMjIyBDb21wb25lbnQgMSAoIiRyJCIpDQoNClRoaXMgaXMgdGhlIGZvcm11bGEgdXNlZCB0byBjYWxjdWxhdGUgY29tcG9uZW50IDFbXjFdDQoNCjxkZXRhaWxzPjxzdW1tYXJ5PlNob3cgYWxsIHRoZSBkZXRhaWxzPC9zdW1tYXJ5Pg0KXGJlZ2lue2VxdWF0aW9ufQ0KciA9IFggXHRpbWVzIFxsYW1iZGFfMSAgKyAoMSAtIFgpIFx0aW1lcyBcbGFtYmRhXzINClxsYWJlbHtlcTozfQ0KXHRhZ3szfQ0KXGVuZHtlcXVhdGlvbn0NCg0KV2hlcmU6IA0KDQotICRyJDogb25lLWxpbmVyIGZvciByDQotICRYJDogb25lLWxpbmVyIGZvciBYDQotICRcbGFtYmRhXzEkOiBvbmUtbGluZXIgZm9yICRcbGFtYmRhXzEkDQotICRcbGFtYmRhXzIkOiBvbmUtbGluZXIgZm9yICRcbGFtYmRhXzIkDQoNCmBgYHtyIGNvbXAxLCAgZWNobz1wcmludF9jb2RlLCBldmFsPVRSVUV9DQojIC0gaW5wdXRzOiBmYWN0b3JzIG9mIHINCiMgLSBvdXRwdXRzOiByIHZhbHVlDQpjaHVua19yIDwtIGZ1bmN0aW9uKCl7DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICANCg0KICAgIHJfZnVuY3Rpb25fZiA8LSBmdW5jdGlvbihyX2lucHV0MV92YXIgPSByX2lucHV0MV9zbyAsIHJfaW5wdXQyX3ZhciA9IHJfaW5wdXQyX3NvKSB7ICANCiAgICAgICAgcl9pbnB1dDFfdmFyIC0gcl9pbnB1dDJfdmFyDQogICAgICAgIA0KICAgIH0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgDQogICAgcmV0dXJuKGxpc3QoInJfZnVuY3Rpb25fZiIgPSByX2Z1bmN0aW9uX2YpKQ0KfQ0KDQppbnZpc2libGUoIGxpc3QyZW52KGNodW5rX3IoKSwuR2xvYmFsRW52KSApDQoNCmBgYA0KPC9kZXRhaWxzPg0KDQojIyBBcHByb2FjaCAxOiBTb3VyY2UgTmFtZSAoc291cmNlIGxpbmspDQojIyMgQ29tcG9uZW50IDIgKCIkcSQiKQ0KDQpUaGlzIGlzIHRoZSBmb3JtdWxhIHVzZWQgdG8gY2FsY3VsYXRlIGNvbXBvbmVudCAyW14yXQ0KDQo8ZGV0YWlscz48c3VtbWFyeT5TaG93IGFsbCB0aGUgZGV0YWlsczwvc3VtbWFyeT4NClxiZWdpbntlcXVhdGlvbn0NCnEgPSAgXHRleHR7aW5wdXR9IFx0aW1lcyBcYWxwaGFfMCAoMSArIGcpXntYfSgxICsgXGhhdHtcYmV0YV8xfSBYICsgXGhhdHtcYmV0YV8yfSBYXjIpDQpcbGFiZWx7ZXE6fQ0KXHRhZ3s0fQ0KXGVuZHtlcXVhdGlvbn0NCg0KV2hlcmU6IA0KDQotICRxJDogb25lLWxpbmVyIHRvIGRlZmluZSBxDQotICRcYWxwaGFfMCQ6IG9uZS1saW5lciB0byBkZWZpbmUgJFxhbHBoYV8wJA0KLSAkZyQ6IG9uZS1saW5lciB0byBkZWZpbmUgZw0KLSAkXGhhdHtcYmV0YV8xfSQ6IG9uZS1saW5lciB0byBkZWZpbmUgJFxoYXR7XGJldGFfMX0kDQotICRcaGF0e1xiZXRhXzJ9JDogb25lLWxpbmVyIHRvIGRlZmluZSAkXGhhdHtcYmV0YV8yfSQNCg0KDQpgYGB7ciBjb21wMiwgIGVjaG89cHJpbnRfY29kZSwgZXZhbD1UUlVFfQ0KIyAtIGlucHV0czogZmFjdG9ycyBvZiBxDQojIC0gb3V0cHV0czogcSB2YWx1ZQ0KY2h1bmtfcSA8LSBmdW5jdGlvbigpew0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgDQoNCiAgICBxX2Z1bmN0aW9uX2YgPC0gZnVuY3Rpb24ocV9pbnB1dDFfdmFyID0gcV9pbnB1dDFfc28gLCBxX2lucHV0Ml92YXIgPSBxX2lucHV0Ml9zbykgeyAgDQogICAgICAgIChxX2lucHV0MV92YXIgKiBxX2lucHV0Ml92YXIpXjINCiAgICAgICAgDQogICAgfQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICANCiAgICByZXR1cm4obGlzdCgicV9mdW5jdGlvbl9mIiA9IHFfZnVuY3Rpb25fZikpDQp9DQoNCmludmlzaWJsZSggbGlzdDJlbnYoY2h1bmtfcSgpLC5HbG9iYWxFbnYpICkNCg0KYGBgDQo8L2RldGFpbHM+DQoNCiMjIEFwcHJvYWNoIDI6IFNvdXJjZSBOYW1lIChzb3VyY2UgbGluaykNCiMjIyBDb21wb25lbnQgMyAoIiRrJCIpDQoNClRoaXMgaXMgdGhlIGZvcm11bGEgdXNlZCB0byBjYWxjdWxhdGUgY29tcG9uZW50IDNbXjNdDQoNCjxkZXRhaWxzPjxzdW1tYXJ5PlNob3cgYWxsIHRoZSBkZXRhaWxzPC9zdW1tYXJ5Pg0KXGJlZ2lue2VxdWF0aW9ufQ0KayA9IFIgXHRpbWVzIFggICsgKDEgLSBSKSBcdGltZXMgWA0KXGxhYmVse2VxOjV9DQpcdGFnezV9DQpcZW5ke2VxdWF0aW9ufQ0KDQpXaGVyZToNCg0KLSAkayQ6IG9uZS1saW5lciB0byBkZWZpbmUgaw0KLSAkUiQ6IG9uZS1saW5lciB0byBkZWZpbmUgUg0KDQoNCmBgYHtyIGNvbXAzLCAgZWNobz1wcmludF9jb2RlLCBldmFsPVRSVUV9DQojIC0gaW5wdXRzOiBmYWN0b3JzIG9mIHENCiMgLSBvdXRwdXRzOiBxIHZhbHVlDQpjaHVua19rIDwtIGZ1bmN0aW9uKCl7DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICANCg0KICAgIGtfZnVuY3Rpb25fZiA8LSBmdW5jdGlvbihrX2lucHV0MV92YXIgPSBrX2lucHV0MV9zbyAsIGtfaW5wdXQyX3ZhciA9IGtfaW5wdXQyX3NvKSB7ICANCiAgICAgICAgKGtfaW5wdXQxX3ZhciAqIGtfaW5wdXQyX3ZhcileMg0KICAgICAgICANCiAgICB9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIA0KICAgIHJldHVybihsaXN0KCJrX2Z1bmN0aW9uX2YiID0ga19mdW5jdGlvbl9mKSkNCn0NCg0KaW52aXNpYmxlKCBsaXN0MmVudihjaHVua19rKCksLkdsb2JhbEVudikgKQ0KDQoNCmBgYA0KDQo8L2RldGFpbHM+DQojIyBTdW1tYXJ5IG9mIEFsbCBBcHByb2FjaGVzIA0KDQoNCnwgQXBwcm9hY2ggICAgfCBQYXJ0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFydCAyICAgICAgICB8DQp8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18DQp8IDEuMSB8IFNwZWNpZmljYXRpb24gb2YgQXBwcm9hY2ggMSB3aXRoIFBhcnQgMSBBc3N1bXB0aW9uIDEgfCBTcGVjaWZpY2F0aW9uIG9mIEFwcHJvYWNoIDEgd2l0aCBQYXJ0IDIgQXNzdW1wdGlvbiAxICB8DQp8IDEuMiB8IFNwZWNpZmljYXRpb24gb2YgQXBwcm9hY2ggMSB3aXRoIFBhcnQgMSBBc3N1bXB0aW9uIDIgfCBTcGVjaWZpY2F0aW9uIG9mIEFwcnJvYWNoIDEgd2l0aCBQYXJ0IDIgQXNzdW1wdGlvbiAyICB8DQp8IDIuMSB8IFNwZWNpZmljYXRpb24gb2YgQXBwcm9hY2ggMiB3aXRoIFBhcnQgMSBBc3N1bXB0aW9uIDEgfCBTcGVjaWZpY2F0aW9uIG9mIEFwcHJvYWNoIDIgd2l0aCBQYXJ0IDIgQXNzdW1wdGlvbiAxIHwNCnwgKioyLjIqKiB8ICoqU3BlY2lmaWNhdGlvbiBvZiBBcHByb2FjaCAyIHdpdGggUGFydCAxIEFzc3VtcHRpb24gMioqIHwgKipTcGVjaWZpY2F0aW9uIG9mIEFwcHJvYWNoIDIgd2l0aCBQYXJ0IDIgQXNzdW1wdGlvbiAyKip8DQoNCkJvbGRlZCByb3cgaXMgdGhlIGFzc3VtcHRpb25zIGFuZCB0aGUgYXBwcm9hY2ggd2UgdXNlIHRvIGdlbmVyYXRlIHRoZSBtYWluIHBvbGljeSBlc3RpbWF0ZSBwbG90LiANCg0KDQojIE1haW4gcmVzdWx0cw0KPGRldGFpbHM+PHN1bW1hcnk+U2hvdyBhbGwgdGhlIGRldGFpbHM8L3N1bW1hcnk+DQpgYGB7ciBhbGwtc3RlcHMsICBlY2hvPXByaW50X2NvZGUsIGV2YWwgPSBUUlVFfQ0KI3VuaXQgdGVzdCBmdW5jdGlvbg0KdW5pdF90ZXN0X2YgPC0gZnVuY3Rpb24odG9fdGVzdF92YXIsIG9yaWdpbmFsX3ZhciwgbWFpbl9ydW5fdmFyID0gVFJVRSl7DQogICAgaWYgKG1haW5fcnVuX3ZhciA9PSBUUlVFKSB7DQogICAgICAgIGlmIChsZW5ndGgodG9fdGVzdF92YXIpID4gMSkgew0KICAgICAgICAgICAgZmFpbHNfdGVzdCA8LSAoIGFicyhzZCh0b190ZXN0X3ZhcikgLSBvcmlnaW5hbF92YXIpID4gMC4wMDAxICkNCiAgICAgICAgICAgIHRleHRfdmFsIDwtIHNkKHRvX3Rlc3RfdmFyKQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZmFpbHNfdGVzdCA8LSAoIGFicyh0b190ZXN0X3ZhciAtIG9yaWdpbmFsX3ZhcikgPiAwLjAwMDEgKQ0KICAgICAgICAgICAgdGV4dF92YWwgPC0gdG9fdGVzdF92YXINCiAgICAgICAgfQ0KICAgICAgICBpZiAoZmFpbHNfdGVzdCkgew0KICAgICAgICAgICAgcHJpbnQocGFzdGUoIk91dHB1dCBoYXMgY2hhbmdlIGF0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGFyc2Uoc3Vic3RpdHV0ZSh0b190ZXN0X3ZhcikgKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gIiwgdGV4dF92YWwpICkNCiAgICAgICAgfQ0KICAgICAgfQ0KfQ0KDQpvbmVfcnVuIDwtIA0KICBmdW5jdGlvbihyX2lucHV0MV92YXIxID0gcl9pbnB1dDFfc28sIA0KICAgICAgICAgICByX2lucHV0Ml92YXIxID0gcl9pbnB1dDJfc28sIA0KICAgICAgICAgICBxX2lucHV0MV92YXIxID0gcV9pbnB1dDFfc28sDQogICAgICAgICAgIHFfaW5wdXQyX3ZhcjEgPSBxX2lucHV0Ml9zbywNCiAgICAgICAgICAga19pbnB1dDFfdmFyMSA9IGtfaW5wdXQxX3NvLA0KICAgICAgICAgICBrX2lucHV0Ml92YXIxID0ga19pbnB1dDJfc28peyMgVmFyaWFibGVzIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcG9saWN5IGVzdGltYXRlcw0KICAgIA0KICAgIHJfaW4gPC0gcl9mdW5jdGlvbl9mKHJfaW5wdXQxX3ZhciA9IHJfaW5wdXQxX3ZhcjEsDQogICAgICAgICAgICAgICAgICAgICAgICAgcl9pbnB1dDJfdmFyID0gcl9pbnB1dDJfdmFyMSkNCiAgICBxX2luIDwtIHFfZnVuY3Rpb25fZihxX2lucHV0MV92YXIgPSBxX2lucHV0MV92YXIxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHFfaW5wdXQyX3ZhciA9IHFfaW5wdXQyX3ZhcjEpDQogICAga19pbiA8LSBrX2Z1bmN0aW9uX2Yoa19pbnB1dDFfdmFyID0ga19pbnB1dDFfdmFyMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBrX2lucHV0Ml92YXIgPSBrX2lucHV0Ml92YXIxKQ0KICAgIHJldHVybiAobGlzdCgicl9pbiIgPSByX2luLA0KICAgICAgICAgICAgICAgICAicV9pbiIgPSBxX2luLA0KICAgICAgICAgICAgICAgICAia19pbiIgPSBrX2luKSkNCiAgICAgICAgICAgfQ0KICAgIA0KaW52aXNpYmxlKGxpc3QyZW52KG9uZV9ydW4oKSwgLkdsb2JhbEVudikpDQoNCiAgICANCmBgYA0KDQo8L2RldGFpbHM+DQpgYGB7ciBtYWluLXJlc3VsdHMsICBlY2hvPXByaW50X2NvZGUsIGV2YWwgPSBUUlVFfQ0KIyAtIHBlcmZvcm0gdGhlIGNhbGN1bGF0aW9ucyB0byBhY2hpZXZlIGZpbmFsIHJlc3VsdHMNCg0KcmVzdWx0MSA8LSBtYWluZXF1YXRpb25fZihyX2ZpbmFsX3ZhciA9IHJfaW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgIHFfZmluYWxfdmFyID0gcV9pbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAga19maW5hbF92YXIgPSBrX2luKQ0KcmVzdWx0MiA8LSBhbHRlcm5hdGl2ZV9mKHJfZmluYWxfdmFyID0gcl9pbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcV9maW5hbF92YXIgPSBxX2luLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBrX2ZpbmFsX3ZhciA9IGtfaW4pDQojLi4uDQoNCnJlc3VsdHNfdGFibGUgPC0gZGF0YS5mcmFtZSgicmVzdWx0czEiID0gICBjKCJyZXN1bHRzIiwgTkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkgLA0KICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMyIiA9ICBjKE5BLCAicmVzdWx0cyIsIE5BKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzMyIgPSBjKCJyZXN1bHRzIiwgTkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICByb3cubmFtZXMgPSBjKCJzaXR1YXRpb24xIiwgInNpdHVhdGlvbjIiLCAic2l0dWF0aW9uMyIpKQ0KDQprYWJsZShyZXN1bHRzX3RhYmxlLCBjYXB0aW9uID0gIlRhYmxlIENhcHRpb24iKSAlPiUNCiAga2FibGVfc3R5bGluZygic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGKQ0KYGBgDQoNCg0KYGBge3IgZ2VuZXJhdGUtcGxvdC1mdW5jdGlvbiwgcHVybCA9IFRSVUUsIGVjaG8gPSBGQUxTRX0NCiMgZ2VuZXJhdGVfcGxvdF9mOiBmdW5jdGlvbiB0byBnZW5lcmF0ZSBwbG90cyBmb3IgYm90aCBEeW5hbWljIERvY3VtZW50IGFuZA0KIyBzaGlueSBhcHAuIEl0IHRha2VzIGluIHRoZSBzaW11bGF0ZWQgZGF0YSwgcG9saWN5IGVzdGltYXRlIHRleHQsIGFuZCByZXNjYWxlDQojIHZhcmlhYmxlLiBUaGVzZSBhcmUgaW50ZXJtZWRpYXJ5IHZhcmlhYmxlcyB0byBleGNsdWRlIHRoZSBpbnRlcmFjdGl2aXR5IG9mDQojIHNoaW55IGFwcCBmcm9tIHRoZSBwbG90IGdlbmVyYXRpb24gcHJvY2Vzcy4gIA0KY2h1bmtfZ2VuZXJhdGVfcGxvdCA8LSBmdW5jdGlvbigpIHsNCiAgZ2VuZXJhdGVfcGxvdF9mIDwtIGZ1bmN0aW9uKHJlc3VsdDFfc2ltX2FsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeV9lc3RpbWF0ZXNfdGV4dF9zZWxlY3RlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2NhbGUsIFNEID0gRkFMU0Upew0KICAgIHRvdGFsX3RpbWVfc2ltIDwtIHJlc3VsdDFfc2ltX2FsbCR0b3RhbF90aW1lX3NpbQ0KICAgIHBvc2l0aW9uIDwtIHdoaWNoKCBwb2xpY3lfZXN0aW1hdGVzX3RleHQgPT0gcG9saWN5X2VzdGltYXRlc190ZXh0X3NlbGVjdGVkKQ0KICAgIHJlc3VsdDFfc2ltIDwtIHJlc3VsdDFfc2ltX2FsbFtbIHBvbGljeV9lc3RpbWF0ZXNfdmFybmFtZXNbcG9zaXRpb25dIF1dICAgIA0KICAgIHJlc3VsdDFfZm9yX3RleHQgPC0gcGFzdGUoIk1lZGlhbiBOUFY6ICIsIHJvdW5kKG1lZGlhbihyZXN1bHQxX3NpbSksIDIpKQ0KICAgIHJlc3VsdDFfZm9yX3RleHQyIDwtIE5VTEwNCiAgICBpZiAoU0Qpew0KICAgIHJlc3VsdDFfZm9yX3RleHQyIDwtIHBhc3RlKCJTRCBOUFY6ICIsIHJvdW5kKHNkKHJlc3VsdDFfc2ltKSwgMikpDQogICAgfQ0KICAgIHBsb3QxIDwtIGdncGxvdCgpICsNCiAgICAgIGdlb21fZGVuc2l0eSgNCiAgICAgICAgYWVzKHggPSByZXN1bHQxX3NpbSwNCiAgICAgICAgICAgIGFscGhhID0gMSAvIDIsIC4uc2NhbGVkLi4pLA0KICAgICAgICBrZXJuZWwgPSAiZ2F1IiwNCiAgICAgICAgbHdkID0gMSwNCiAgICAgICAgZmlsbCA9ICIjMDA3YmE3IiwNCiAgICAgICAgY29sb3IgPSAiZGFya2JsdWUiLA0KICAgICAgICBhbHBoYSA9IDAuMw0KICAgICAgKSArDQogICAgICBnZW9tX3ZsaW5lKA0KICAgICAgICB4aW50ZXJjZXB0ID0gYygwLCBtZWRpYW4ocmVzdWx0MV9zaW0pKSwNCiAgICAgICAgY29sID0gYygiYmxhY2siLCAiZGFya2JsdWUiKSwNCiAgICAgICAgbHdkID0gYygxLCAxKSwNCiAgICAgICAgbGluZXR5cGUgPSBjKCJzb2xpZCIsICJkYXNoZWQiKQ0KICAgICAgKSArDQogICAgICBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoLTMwMCwxMDAwKSwgIHlsaW0gPSAgYyggMCwgMS4yICkpICArICAjIGZpeGluZyB0aGUgeCBheGlzIHNvIHNoaWZ0cyBpbiB0aGUgZGVuc2l0eSBjYW4gYmUgc2Vlbg0KICAgICAgI3hsaW0ocmFuZ2UoZGVuc2l0eShyZXN1bHQxX3NpbSkkeCkpICsNCiAgICAgIGd1aWRlcyhhbHBoYSA9ICJub25lIiwgY29sb3VyID0gIm5vbmUiKSArDQogICAgICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSBjKDAsIDApKSkgKw0KICAgICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLCAwKSkpICsNCiAgICAgIGFubm90YXRlKA0KICAgICAgICAidGV4dCIsDQogICAgICAgIHggPSAxICogbWVkaWFuKHJlc3VsdDFfc2ltKSwNCiAgICAgICAgeSA9IDAuMiwNCiAgICAgICAgbGFiZWwgPSByZXN1bHQxX2Zvcl90ZXh0LA0KICAgICAgICBzaXplID0gNiwNCiAgICAgICAgY29sb3IgPSAiZGFya2JsdWUiDQogICAgICApICsNCiAgICAgIGFubm90YXRlKA0KICAgICAgICAidGV4dCIsDQogICAgICAgIHggPSAxICogbWVkaWFuKHJlc3VsdDFfc2ltKSwNCiAgICAgICAgeSA9IDAuMSwNCiAgICAgICAgbGFiZWwgPSByZXN1bHQxX2Zvcl90ZXh0MiwNCiAgICAgICAgc2l6ZSA9IDYsDQogICAgICAgIGNvbG9yID0gImRhcmtibHVlIg0KICAgICAgKSArDQogICAgICB0aGVtZSgNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KSwNCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy5saW5lLnggPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMS41KQ0KICAgICAgKQ0KDQogICAgaWYgKHJlc2NhbGUgPT0gVFJVRSkgew0KICAgICAgcGxvdDEgPC0NCiAgICAgICAgc3VwcHJlc3NNZXNzYWdlcyhwbG90MSArIGNvb3JkX2NhcnRlc2lhbih4bGltID0gMS4yICogYyhtaW4oYygNCiAgICAgICAgICAtMSwgcmVzdWx0MV9zaW0NCiAgICAgICAgKSksIG1heChjKA0KICAgICAgICAgIDEwMCwgcmVzdWx0MV9zaW0NCiAgICAgICAgKSkpKSkNCiAgICB9DQogICAgcmV0dXJuIChsaXN0KHBsb3QxLHBvc2l0aW9uLHRvdGFsX3RpbWVfc2ltKSkNCn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmV0dXJuKGxpc3QoImdlbmVyYXRlX3Bsb3RfZiIgPSBnZW5lcmF0ZV9wbG90X2YpKQ0KfQ0KDQppbnZpc2libGUoIGxpc3QyZW52KGNodW5rX2dlbmVyYXRlX3Bsb3QoKSwuR2xvYmFsRW52KSApDQpgYGANCg0KIyBNb250ZSBDYXJsbyBTaW11bGF0aW9ucyAgDQpgYGB7ciBtYy1zZXR1cCwgIGVjaG89cHJpbnRfY29kZSwgZXZhbCA9IFRSVUV9DQoNCnNpbV9kYXRhMV9mIDwtIGZ1bmN0aW9uKG5zaW1zID0gMWUyLA0KICAgICAgICAgICAgICAgICAgICAgIHJfaW5wdXQxX3ZhcjIsDQogICAgICAgICAgICAgICAgICAgICAgcl9pbnB1dDFfdmFyMl9zZCwNCiAgICAgICAgICAgICAgICAgICAgICByX2lucHV0Ml92YXIyLA0KICAgICAgICAgICAgICAgICAgICAgIHJfaW5wdXQyX3ZhcjJfc2QsDQogICAgICAgICAgICAgICAgICAgICAgcV9pbnB1dDFfdmFyMiwNCiAgICAgICAgICAgICAgICAgICAgICBxX2lucHV0MV92YXIyX3NkLA0KICAgICAgICAgICAgICAgICAgICAgIHFfaW5wdXQyX3ZhcjIsDQogICAgICAgICAgICAgICAgICAgICAgcV9pbnB1dDJfdmFyMl9zZCwNCiAgICAgICAgICAgICAgICAgICAgICBrX2lucHV0MV92YXIyLA0KICAgICAgICAgICAgICAgICAgICAgIGtfaW5wdXQxX3ZhcjJfc2QsDQogICAgICAgICAgICAgICAgICAgICAga19pbnB1dDJfdmFyMiwNCiAgICAgICAgICAgICAgICAgICAgICBrX2lucHV0Ml92YXIyX3NkKXsNCiAgICAjIyMjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMjIERyYXdzICAgDQogICAgIyMjIyMjIyMjIyMjIyMjIyAgDQogIHN0YXJ0X3RpbWUgPC0gU3lzLnRpbWUoKQ0KICBzZXQuc2VlZCgxNDI4NTcpDQogIHIxX3NpbSA8LSBybm9ybShuID0gbnNpbXMsIG1lYW4gPSByX2lucHV0MV92YXIyLCBzZD0gcl9pbnB1dDFfdmFyMl9zZCkNCiAgcjJfc2ltIDwtIHJub3JtKG4gPSBuc2ltcywgbWVhbiA9IHJfaW5wdXQyX3ZhcjIsIHNkPSByX2lucHV0Ml92YXIyX3NkKQ0KICBxMV9zaW0gPC0gcm5vcm0obiA9IG5zaW1zLCBtZWFuID0gcV9pbnB1dDFfdmFyMiwgc2Q9IHFfaW5wdXQxX3ZhcjJfc2QpDQogIHEyX3NpbSA8LSBybm9ybShuID0gbnNpbXMsIG1lYW4gPSBxX2lucHV0Ml92YXIyLCBzZD0gcV9pbnB1dDJfdmFyMl9zZCkNCiAgazFfc2ltIDwtIHJub3JtKG4gPSBuc2ltcywgbWVhbiA9IGtfaW5wdXQxX3ZhcjIsIHNkPSBrX2lucHV0MV92YXIyX3NkKQ0KICBrMl9zaW0gPC0gcm5vcm0obiA9IG5zaW1zLCBtZWFuID0ga19pbnB1dDJfdmFyMiwgc2Q9IGtfaW5wdXQyX3ZhcjJfc2QpDQogIA0KICANCiAgDQogICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAjIyMjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMjIFJ1bnMgICAgDQogICAgIyMjIyMjIyMjIyMjIyMjIw0KDQogIHJlc3VsdDFfc2ltIDwtIHJlcChOQSwgbnNpbXMpICNyZXN1bHQxDQogIHJlc3VsdDJfc2ltIDwtIHJlcChOQSwgbnNpbXMpICNyZXN1bHQyDQogIA0KICBmb3IgKGkgaW4gMTpuc2ltcyl7DQogICAgaW52aXNpYmxlKGxpc3QyZW52KA0KICAgICAgb25lX3J1bihyX2lucHV0MV92YXIxID0gcjFfc2ltW2ldLA0KICAgICAgICAgICAgICByX2lucHV0Ml92YXIxID0gcjJfc2ltW2ldLA0KICAgICAgICAgICAgICBxX2lucHV0MV92YXIxID0gcTFfc2ltW2ldLA0KICAgICAgICAgICAgICBxX2lucHV0Ml92YXIxID0gcTJfc2ltW2ldLA0KICAgICAgICAgICAgICBrX2lucHV0MV92YXIxID0gazFfc2ltW2ldLA0KICAgICAgICAgICAgICBrX2lucHV0Ml92YXIxID0gazJfc2ltW2ldDQogICAgICAgICAgICAgICksIC5HbG9iYWxFbnYpKQ0KICAgIA0KICAgIHJlc3VsdDFfc2ltW2ldIDwtIG1haW5lcXVhdGlvbl9mKHJfZmluYWxfdmFyID0gcl9pbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcV9maW5hbF92YXIgPSBxX2luLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBrX2ZpbmFsX3ZhciA9IGtfaW4pDQogICAgcmVzdWx0Ml9zaW1baV0gPC0gYWx0ZXJuYXRpdmVfZihyX2ZpbmFsX3ZhciA9IHJfaW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgIHFfZmluYWxfdmFyID0gcV9pbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAga19maW5hbF92YXIgPSBrX2luKQ0KICB9DQogICAgdG90YWxfdGltZSA8LSBTeXMudGltZSgpIC0gc3RhcnRfdGltZQ0KICAgIHJldHVybihsaXN0KCJyZXN1bHQxX3NpbSIgPSByZXN1bHQxX3NpbSwNCiAgICAgICAgICAgICAgICAicmVzdWx0Ml9zaW0iID0gcmVzdWx0Ml9zaW0pKQ0KICANCiAgDQp9DQoNCnBvbGljeV9lc3RpbWF0ZXNfdmFybmFtZXMgPC0gYygNCiAgInJlc3VsdDFfc2ltIiwNCiAgInJlc3VsdDJfc2ltIg0KKQ0KDQpwb2xpY3lfZXN0aW1hdGVzX3RleHQgPC0gYygNCiAgIk1haW4gRXF1YXRpb24iLA0KICAiQWx0ZXJuYXRpdmUgRXF1YXRpb24iDQopDQoNCmBgYA0KDQpgYGB7ciBtYy1ydW4sIGRwaSA9IDQwMCwgZWNobyA9IHByaW50X2NvZGUsIGV2YWwgPSBUUlVFfQ0KIyBSdW4gTW9udGUgQ2FybG8gc2ltdWxhdGlvbiBmb3Igb3VyIG1haW4gbW9kZWwNCnJlc3VsdDFfc2ltX2FsbCA8LSBzaW1fZGF0YTFfZihuc2ltcyA9IG5zaW1zX3NvLCANCiAgICAgICAgICAgICAgICAgICAgICByX2lucHV0MV92YXIyID0gcl9pbnB1dDFfc28sDQogICAgICAgICAgICAgICAgICAgICAgcl9pbnB1dDFfdmFyMl9zZCA9IHJfaW5wdXQxX3NvICogMC4xLA0KICAgICAgICAgICAgICAgICAgICAgIHJfaW5wdXQyX3ZhcjIgPSByX2lucHV0Ml9zbywNCiAgICAgICAgICAgICAgICAgICAgICByX2lucHV0Ml92YXIyX3NkID0gcl9pbnB1dDJfc28gKiAwLjEsDQogICAgICAgICAgICAgICAgICAgICAgcV9pbnB1dDFfdmFyMiA9IHFfaW5wdXQxX3NvLA0KICAgICAgICAgICAgICAgICAgICAgIHFfaW5wdXQxX3ZhcjJfc2QgPSBxX2lucHV0MV9zbyAqIDAuMSwNCiAgICAgICAgICAgICAgICAgICAgICBxX2lucHV0Ml92YXIyID0gcV9pbnB1dDJfc28sDQogICAgICAgICAgICAgICAgICAgICAgcV9pbnB1dDJfdmFyMl9zZCA9IHFfaW5wdXQyX3NvICogMC4xLA0KICAgICAgICAgICAgICAgICAgICAgIGtfaW5wdXQxX3ZhcjIgPSBrX2lucHV0MV9zbywNCiAgICAgICAgICAgICAgICAgICAgICBrX2lucHV0MV92YXIyX3NkID0ga19pbnB1dDFfc28gKiAwLjEsDQogICAgICAgICAgICAgICAgICAgICAga19pbnB1dDJfdmFyMiA9IGtfaW5wdXQyX3NvLA0KICAgICAgICAgICAgICAgICAgICAgIGtfaW5wdXQyX3ZhcjJfc2QgPSBrX2lucHV0Ml9zbyAqIDAuMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIFJlc3VsdHMvVml6DQojIyMjIyMjIyMjIyMjIyMjDQoNCg0KbGlicmFyeShwbG90bHkpDQoNCg0KcGxvdDEgPC0gZ2VuZXJhdGVfcGxvdF9mKHJlc3VsdDFfc2ltX2FsbCwgcG9saWN5X2VzdGltYXRlX3NvLCByZXNjYWxlX3NvKVtbMV1dICsNCiAgICAgIGxhYnMoeSA9IE5VTEwsDQogICAgICAgeCA9ICJNYWluIEVzdGltYXRlIiAsDQogICAgICAgdGl0bGUgPSAiUHJvamVjdCBUaXRsZSIsDQogICAgICAgc3VidGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIEtleSBJbmRpY2F0b3IiDQogICAgICAgKSANCnByaW50KHBsb3QxKQ0KYGBgDQoNCg0KDQoNCiMgUmVmZXJlbmNlcw0KDQoNClteMV06IE5vdGVzIG9mIHJlZmVyZW5jZWQgc2VjdGlvbg0KDQoNClteMl06IE5vdGVzIG9uIHJlZmVyZW5jZWQgc2VjdGlvbg0KDQpbXjNdOiBOb3RlcyBvbiByZWZlcmVuY2VkIHNlY3Rpb24NCg==

An Open Policy Analysis by BITSS
See a full contributors list here
opa@berkeley.edu